// 这块 是通用工具  这里我们把它 建成 类

// 类 和 对象 的区别是  
//  类可以做隔离的作用域 

// 假如这块用对象的话 几个模块 同时使用这一个模块 
// 如果有一个模块把对象里的变量改了  其他模块就都会受影响
// 使用 类  有 单独的作用域  每个模块的使用 重新的New 一下就好了、

class MUtil{

    // 先写个 通用的请求接口的方法
    request(param){
        return new Promise((resolve,reject)=>{
            $.ajax({
                // 1 请求格式 自定义的请求格式 param.type 没有的话 就是get 默认的请求
                type: param.type || 'get',
                // 2 请求地址
                url: param.url || '',
                // 指定我们 传输的类型 
                dataType: param.dataType || 'json',
                // 这是我要传给后端的数据
                data: param.data || null,
               

                //后面的是对数据传输后的回掉的处理               
                success: res => {
                    // console.log("123");
                    // console.log(res);
                    // console.log(param);
                    // console.log(param.data); 
                    // 数据请求成功
                    if(0 ===res.status){
                        // console.log("8" + res);
                        // 这是Promise函数里的then的resolve方法
                        // then函数是在login页面里
                        // onSubmit()这个方法调用MUtil里的request这个方法
                        // 而request里又有 Promise这个处理异步回调函数的方法
                        // so 这个resolve方法将会在login页面里执行 
                        // 这里的参数就会传到login页面里执行  so login页面的res 是ren.data
                        // resolve(res.data,res.msg) 这句就是开始传输数据了
                     typeof resolve === 'function' && resolve(res.data,res.msg);
                    // 这里用来 typeof 是用来判断resolve 是不是function
                    } 
                // 没有登录强制登录
                    else if(10 ===res.status){
                        this.doLogin();

                    }
                    else{
                        typeof reject === 'function' && reject(res.msg || res.data);
                    }
                },
                error:err=> {
                    typeof reject === 'function' && reject(err.statusText);
                }
            });
        });


        
        // 在请求的时候 可以引用一些组件 jquery 的 Ajax 的请求 也可以的
        //在 后面会引用Ajax的插件 所以一定会引用jquery的 
        // $.ajax({
        //     // 1 请求格式 自定义的请求格式 param.type 没有的话 就是get 默认的请求
        //     type     : parm.type ||'get',
        //     // 2 请求地址
        //     url      : param.url || '',
        //     // 指定我们 传输的类型 
        //     dataType : param.dataType || 'json',
        //     // 这是我要传给后端的数据
        //     data     : param.data || null,
        //     //后面的是对数据传输后的回掉的处理
        //     success(res){

        //     },
        //     error(err){

        //     } 
        // });
        
    }
    // 跳转登录
    doLogin(){ 
        window.location.href= '/login?redirect='+ encodeURIComponent(window.location.pathname);
    }
    // 获取url参数的
    getUrlParam(name){
        //xxx.com?param=123&param1=456 
        let queryString = window.location.search.split('?')[1]||'',
            reg         = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
            result      = queryString.match(reg)  ;    
            // result :['param=123','','123','&']   
            // so 在result里我们想取到name对应的值 就要取下标为2的元素
            return result ? decodeURIComponent(result[2]) : null
    }
    // 成功提示
    successTips(successMsg){
        alert(successMsg || "请求成功~~~");
    }
    // 错误信息
    errorTips(errMsg){
        alert(errMsg || "好像哪里不对~~~");
    }
    // 本地存储
    setStorage(name,data){
        let dataType = typeof data;
        if (dataType==='object'){
            // 这里给object 类型的json数据进行JSON的序列化处理  这样就保存为json字符串
            window.localStorage.setItem(name,JSON.stringify(data));
        }
        // 如果是基础类型的是数据
        else if(['number','string','boolean'].indexOf('dataType') >= 0){
            // 基础类型的数据 就不用JSON序列化了 直接可以进行存储
            window.localStorage.setItem(name,data);
        }else{
            alert('该类型 不能用于本地存储');
        }
    }
    // 本地数据 提取
    getStorage(name){
        let data =window.localStorage.getItem(name);
        if(data){
            // parse的用法
            return JSON.parse(data);
        }
        else{
            return '';
        }
    }
    // 删除 本地数据
    removeStorage(name){
        window.localStorage.removeItem(name);
    }

}

export default MUtil